package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEmpSocBackRecordInfoDAO;
import org.jsola.hr.dto.EmpSocBackRecordInfoAddDTO;
import org.jsola.hr.dto.EmpSocBackRecordInfoUpdateDTO;
import org.jsola.hr.entity.EmpSocBackRecordInfoDO;
import org.jsola.hr.query.EmpSocBackRecordInfoQuery;
import org.jsola.hr.vo.EmpSocBackRecordInfoListVO;
import org.jsola.hr.vo.EmpSocBackRecordInfoVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 社保回款信息
 *
 * @author zhr
 */
public interface IEmpSocBackRecordInfoService extends IService<IEmpSocBackRecordInfoDAO, EmpSocBackRecordInfoDO> {

    /**
     * 新增社保回款信息
     *
     * @param empSocBackRecordInfoAddDTO 新增社保回款信息DTO
     * @param tokenUser                  当前用户
     * @return 社保回款信息详情信息
     */
    EmpSocBackRecordInfoVO save(EmpSocBackRecordInfoAddDTO empSocBackRecordInfoAddDTO, TokenUser tokenUser);

    /**
     * 新增社保回款信息（批量）
     *
     * @param empSocBackRecordInfos 新增社保回款信息DTO
     * @param tokenUser             当前用户
     * @return 新增数量
     */
    Integer saveBatch(EmpSocBackRecordInfoAddDTO[] empSocBackRecordInfos, TokenUser tokenUser);


    /**
     * 修改社保回款信息
     *
     * @param empSocBackRecordInfoUpdateDTO 修改社保回款信息DTO
     * @param tokenUser                     当前用户
     * @return 更新数量
     */
    int update(EmpSocBackRecordInfoUpdateDTO empSocBackRecordInfoUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除社保回款信息，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser               当前用户
     * @param empSocBackRecordInfoIds 社保回款信息id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... empSocBackRecordInfoIds);

    /**
     * 根据社保回款信息id查找
     *
     * @param empSocBackRecordInfoId 社保回款信息id
     * @param siteId                 所属站点id
     * @return 社保回款信息详情信息
     */
    EmpSocBackRecordInfoVO selectById(String empSocBackRecordInfoId, String siteId);

    /**
     * 查询社保回款信息
     *
     * @param empSocBackRecordInfoQuery 查询条件
     * @param siteId                    所属站点id
     * @return 社保回款信息列表信息
     */
    List<EmpSocBackRecordInfoListVO> select(EmpSocBackRecordInfoQuery empSocBackRecordInfoQuery, String siteId);

    /**
     * 查询社保回款信息记录数
     *
     * @param empSocBackRecordInfoQuery 查询条件
     * @param siteId                    所属站点id
     * @return 社保回款信息记录数
     */
    int selectCount(EmpSocBackRecordInfoQuery empSocBackRecordInfoQuery, String siteId);

    /**
     * 分页查询社保回款信息
     *
     * @param empSocBackRecordInfoQuery 查询条件
     * @param siteId                    所属站点id
     * @return 社保回款信息列表信息
     */
    Page<EmpSocBackRecordInfoListVO> selectPage(EmpSocBackRecordInfoQuery empSocBackRecordInfoQuery, String siteId);


    /**
     * 根据社保回款信息id查找
     *
     * @param empSocBackRecordInfoId 社保回款信息id
     * @param siteId                 所属站点id
     * @return 社保回款信息
     */
    EmpSocBackRecordInfoDO selectDOById(String empSocBackRecordInfoId, String siteId);

    /**
     * 查询社保回款信息
     *
     * @param empSocBackRecordInfoQuery 查询条件
     * @param siteId                    所属站点id
     * @return 社保回款信息列表
     */
    List<EmpSocBackRecordInfoDO> selectDO(EmpSocBackRecordInfoQuery empSocBackRecordInfoQuery, String siteId);

    /**
     * 条件查询回款计划(不分页)
     *
     * @param query  查询条件
     * @param siteId 站点
     * @return
     */
    List<EmpSocBackRecordInfoListVO> selectBackRecordInfo(EmpSocBackRecordInfoQuery query, String siteId);

    /**
     * 导出回款记录
     *
     * @param query  查询条件
     * @param siteId 站点
     * @return Excel路径
     */
    String selectExportPath(EmpSocBackRecordInfoQuery query, String siteId);

    /**
     * 设置前端需要展示的信息
     *
     * @param empSocBackRecordInfoListVO VO对象
     * @param tokenUser                  当前用户
     */
    void setEmpInfoToEmpSocBackRecordInfo(EmpSocBackRecordInfoListVO empSocBackRecordInfoListVO, TokenUser tokenUser);

    /**
     * 根据empId、year、month查询社保回款信息
     *
     * @param empId 员工id
     * @param year  年
     * @param month 月
     * @return 社保回款信息（多个返回一个，没有返回null）
     */
    EmpSocBackRecordInfoDO selectByEmpIdAndYearAndMonth(String empId, String year, String month, TokenUser tokenUser);

}


